Many commercially-important systems, especially Web-based applications, are composed of a number of communicating components. These systems are often structured as distributed systems, with components running on different processors or in different processes. For example, a multi-tiered system may process requests from Web clients that flow through a Web-server front-end and then to a Web application server. The application server may then call a database server, for example, or other types of services such as for authentication, name service, credit-card authorization, or customer relationship management or other support functions.
Distributed systems can be difficult to debug, especially when users experience poor performance. Diagnosing performance issues is even more difficult in distributed systems if the constituent components are composed of “black-box” components. For example, some distributed systems may be constructed from software from many different, and perhaps competing, vendors, and the source code of the different components may be unavailable. Without more than a high-level understanding of the functions provided by the various components, and without the information that could be learned from examination of the source code, selecting a component to begin investigating may involve guesswork and result in wasted time.
The business model under which distributed systems are sold and deployed also contributes to the difficulties associated with addressing performance problems. Enterprises often buy complex systems as complete, customized packages from solutions vendors. Solutions vendors may be pressured to deliver complex component-based systems without the expense of highly-skilled, experienced programmers. While modestly-skilled programmers can design and construct such systems, they may lack the expertise to debug performance problems efficiently. Vendors of individual components may provide training and support for solving performance problems within the components, but not necessarily support for solving performance problems when components from other vendors are involved. Thus, whole-system performance debugging may require either an inordinate amount of time or the services of expensive and hard-to-find systems integration experts. The present invention may address one or more of the above issues.